package com.okwanshiwu.payment.aliUtil;

//import com.alipay.api.AlipayApiException;
//import com.alipay.api.AlipayClient;
//import com.alipay.api.DefaultAlipayClient;
//import com.alipay.api.internal.util.AlipaySignature;
//import com.alipay.api.request.AlipayTradeQueryRequest;
//import com.alipay.api.response.AlipayTradeQueryResponse;
import com.okwanshiwu.pojo.pay.CommonResult;
import org.apache.log4j.Logger;

import java.math.BigDecimal;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Map;

/**
 * 支付宝支付工具类
 *
 * @author
 * @create 2017-08-02 14:11
 **/
public class AliPayUtil {

	private static Logger logger = Logger.getLogger(AliPayUtil.class);

	/**
	 * 创建订单信息工具类
	 *
	 */
	public static String createOrderInfo(AliProperties aliProperties) {
		StringBuffer orderInfo = new StringBuffer();
		// 签约合作者身份ID
		orderInfo.append("partner=\"" + AliProperties.PARTNER + "\"");
		// 签约卖家支付宝账号
		orderInfo.append("&seller_id=\"" + AliProperties.SELLER + "\"");
		// 商户网站唯一订单号
		orderInfo.append("&out_trade_no=\"" + aliProperties.getOrderId() + "\"");
		// 商品名称
		orderInfo.append("&subject=\"" + aliProperties.getSubject() + "\"");
		// 商品详情
		orderInfo.append("&body=\"" + aliProperties.getBody() + "\"");
		// 商品金额
		orderInfo.append("&total_fee=\"" + aliProperties.getPrice() + "\"");
		// 服务器异步通知页面路径
		orderInfo.append("&notify_url=\""+ AliProperties.ALIPAY_NOTIFY +"\"");
		// 服务接口名称， 固定值
		orderInfo.append("&service=\"mobile.securitypay.pay\"");
		// 支付类型， 固定值
		orderInfo.append("&payment_type=\"1\"");
		// 参数编码， 固定值
		orderInfo.append("&_input_charset=\"utf-8\"");
		// 设置未付款交易的超时时间
		// 默认30分钟，一旦超时，该笔交易就会自动被关闭。
		// 取值范围：1m～15d。
		// m-分钟，h-小时，d-天，1c-当天（无论交易何时创建，都在0点关闭）。
		// 该参数数值不接受小数点，如1.5h，可转换为90m。
		orderInfo.append("&it_b_pay=\"30m\"");
		// 支付宝处理完请求后，当前页面跳转到商户指定页面的路径，可空
		orderInfo.append("&return_url=\"m.alipay.com\"");
		return orderInfo.toString();
	}



	/**
	 * 如果网络问题或者签名没通过或者没成功都这返回null
	 * 只有支付宝回复10000的code值，才会正常回复AlipayTradeQueryResponse对象
	 * https://docs.open.alipay.com/api_1/alipay.trade.query
	 * @param orderId
	 * @return
	 */
//	public static AlipayTradeQueryResponse orderResult(String orderId){
//		AlipayClient alipayClient = new DefaultAlipayClient("https://openapi.alipay.com/gateway.do",AliProperties.PARTNER,AliProperties.RSA_PRIVATEOWN,"json","utf-8",AliProperties.ALI_PUBLIC_KEY,"RSA");
//		AlipayTradeQueryRequest request = new AlipayTradeQueryRequest();
//		request.setBizContent("{\"out_trade_no\":\""+orderId+"\"}");
//		AlipayTradeQueryResponse response = null;
//		try {
//			response = alipayClient.execute(request);
//		} catch (AlipayApiException e) {
//			e.printStackTrace();
//			return null;
//		}
//		if(response.isSuccess()){
//			String code = response.getCode();
//			if("10000".equals(code)){
//				return response;
//			}
//		}
//		return null;
//	}

	/**
	 * 验证数据并清理数据
	 * @param map
	 * @return
	 */
//	public static CommonResult cleanData(Map<String,String> map) {
//		boolean signVerified = false; //调用SDK验证签名
//		try {
//			signVerified = AlipaySignature.rsaCheckV1(map, AliProperties.ALI_PUBLIC_KEY, "utf-8");
//		} catch (AlipayApiException e) {
//			e.printStackTrace();
//			return null;
//		}
//		if(signVerified){
//			// TODO 验签成功后
//			//按照支付结果异步通知中的描述，对支付结果中的业务内容进行1\2\3\4二次校验，校验成功后在response中返回success，校验失败返回failure
//			//开始清洗数据
//			CommonResult cr = new CommonResult();
//			cr.setAliAndWx(map.get("trade_no"));
//			cr.setOut_trade_no(map.get("out_trade_no"));
//			cr.setTotal_price(new BigDecimal(map.get("total_amount")).multiply(new BigDecimal("100")).intValue());
//			cr.setPayType("wxPay");
//			try {
//				cr.setPayTime(new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").parse(map.get("gmt_payment")));
//			} catch (ParseException e) {
//				logger.error("回调函数的日期错误，无法转换"+map.get("time_end"));
//				return null;
//			}
//			cr.setPrivateProp(map.get("passback_params"));
//			return cr;
//		}else{
//			// TODO 验签失败则记录异常日志，并在response中返回failure.
//			logger.error("验证签名失败");
//		}
//		return null;
//	}



}
